package br.com.edumobi.activities;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.util.List;
import br.com.edumobi.P;
import br.com.edumobi.R;
import br.com.edumobi.T;
import br.com.edumobi.dados.modelos.Alternativa;
import br.com.edumobi.dados.modelos.Aluno;
import br.com.edumobi.dados.modelos.Classificacao;
import br.com.edumobi.dados.modelos.Questao;
import br.com.edumobi.dados.modelos.Simulado;
import br.com.edumobi.excecoes.ExcecaoConsultaMalsucedida;
import br.com.edumobi.fragments.DashboardFragment;
import br.com.edumobi.utils.Dates;

public class DashboardActivity extends GenericaActivity implements DashboardFragment.AcoesDashboardFragment {

    public static final String EXTRA_ALUNO = "EXTRA_ALUNO";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_dashboard, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.itemDadosMenu:
                Intent intentDadosAluno = new Intent(this, DadosAlunoActivity.class);
                intentDadosAluno.putExtra(DadosAlunoActivity.EXTRA_ALUNO, getAluno());
                startActivity(intentDadosAluno);
                return true;
            case R.id.itemConfiguracoesMenu:
                return true;
            case R.id.itemSairMenu:
                preferencesEditor.putString(P.PREFERENCES_USUARIO_SENHA, P.STRING_EMPITY);
                preferencesEditor.commit();
                startActivity(new Intent(this, LoginActivity.class));
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public Aluno getAluno() {
        return (Aluno) getIntent().getSerializableExtra(EXTRA_ALUNO);
    }

    @Override
    public List<Classificacao> getClassificacoesSuperiores(Classificacao classificacaoSuperior) {
        return local.consultarClassificacoesPorClassificacaoSuperior(classificacaoSuperior);
    }

    @Override
    public void openClassificacao(Classificacao classificacao) {
        Intent intent = new Intent(this, ClassificacoesActivity.class);
        intent.putExtra(ClassificacoesActivity.EXTRA_CLASSIFICACAO, classificacao);
        startActivity(intent);
    }

    @Override
    public Boolean atualizarConteudoLocal() {
        try {
            for (Classificacao classificacao : nuvem.consultarClassificacoes(getPreferencesDataAtualizacao())) {
                if (local.consultarClassificacaoPorId(classificacao.id) == null) {
                    local.inserirClassificacao(classificacao);
                } else {
                    if (!local.consultarClassificacaoPorId(classificacao.id).equals(classificacao)) {
                        local.alterarClassificacao(classificacao);
                    }
                }
                if (classificacao.questoes != null) {
                    for (Questao questao : classificacao.questoes) {
                        if (local.consultarQuestaoPorId(questao.id) == null) {
                            local.inserirQuestao(questao, classificacao);
                        } else {
                            if (!local.consultarQuestaoPorId(questao.id).equals(questao)) {
                                local.alterarQuestao(questao, classificacao);
                            }
                        }
                        if (questao.alternativas != null) {
                            for (Alternativa alternativa : questao.alternativas) {
                                if (local.consultarAlternativaPorId(alternativa.id) == null) {
                                    local.inserirAlternativa(alternativa, questao);
                                } else {
                                    if (!local.consultarAlternativaPorId(alternativa.id).equals(alternativa)) {
                                        local.alterarAlternativa(alternativa, questao);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            for (Simulado simulado : nuvem.consultarSimulados(getPreferencesDataAtualizacao(),local.consultarClassificacaoPorId((long)1))) {
                if (local.consultarSimuladoPorId(simulado.id) == null) {
                    local.inserirSimulado(simulado);
                } else {
                    local.alterarSimulado(simulado);
                }
            }

            putPreferencesDataAtualizacao(Dates.agora());

            return true;
        } catch (ExcecaoConsultaMalsucedida excecao) {
            return false;
        }
    }
}